package com.zenithmind.document.service;

import com.zenithmind.document.pojo.vo.DocumentVO;

import java.util.List;

/**
 * 文档服务接口
 *
 * 违反原则分析：
 * ❌ 接口隔离原则：组合了过多的专门接口，形成巨大接口
 * ❌ 单一职责原则：承担了多种不同类型的职责
 *
 * 修复建议：
 * 1. 拆分为多个独立的服务接口
 * 2. 使用门面模式提供统一入口
 * 3. 客户端只依赖需要的接口
 *
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface DocumentService extends DocumentBasicService,
                                       DocumentSearchService,
                                       DocumentProcessService,
                                       DocumentStatisticsService {

    // 这个接口组合了所有专门的服务接口
    // 所有方法都在各个专门的接口中定义，这里不需要重复定义

    /**
     * 全文搜索文档（扩展方法）
     *
     * @param searchText 搜索文本
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 文档列表
     */
    List<DocumentVO> fullTextSearchDocuments(String searchText, String userId, Integer limit);

    /**
     * 下载文档
     *
     * @param id 文档ID
     * @param userId 用户ID
     * @return 文件流
     */
    byte[] downloadDocument(String id, String userId);

    /**
     * 预览文档
     *
     * @param id 文档ID
     * @param userId 用户ID
     * @return 预览URL
     */
    String previewDocument(String id, String userId);

    /**
     * 收藏文档
     *
     * @param documentId 文档ID
     * @param userId 用户ID
     * @return 是否成功
     */
    Boolean favoriteDocument(String documentId, String userId);

    /**
     * 取消收藏文档
     *
     * @param documentId 文档ID
     * @param userId 用户ID
     * @return 是否成功
     */
    Boolean unfavoriteDocument(String documentId, String userId);

    /**
     * 复制文档
     *
     * @param sourceDocumentId 源文档ID
     * @param newName 新文档名称
     * @param userId 用户ID
     * @return 新文档信息
     */
    DocumentVO copyDocument(String sourceDocumentId, String newName, String userId);

    /**
     * 移动文档
     *
     * @param documentIds 文档ID列表
     * @param categoryId 目标分类ID
     * @return 是否成功
     */
    Boolean moveDocuments(List<String> documentIds, String categoryId);

    /**
     * 获取文档版本列表
     *
     * @param documentId 文档ID
     * @return 版本列表
     */
    List<DocumentVO> getDocumentVersions(String documentId);

    /**
     * 创建文档版本
     *
     * @param documentId 文档ID
     * @param description 版本描述
     * @param userId 用户ID
     * @return 版本ID
     */
    String createDocumentVersion(String documentId, String description, String userId);

    /**
     * 恢复文档版本
     *
     * @param documentId 文档ID
     * @param versionId 版本ID
     * @param userId 用户ID
     * @return 是否成功
     */
    Boolean restoreDocumentVersion(String documentId, String versionId, String userId);

    /**
     * 清理过期文档
     *
     * @return 清理数量
     */
    Integer cleanupExpiredDocuments();

    /**
     * 获取分类文档
     *
     * @param categoryId 分类ID
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 文档列表
     */
    List<DocumentVO> getCategoryDocuments(String categoryId, String userId, Integer limit);

    /**
     * 获取热门文档（带用户ID）
     *
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 文档列表
     */
    List<DocumentVO> getHotDocuments(String userId, Integer limit);

    /**
     * 获取文档存储统计
     *
     * @param userId 用户ID
     * @return 存储统计
     */
    Object getDocumentStorageStatistics(String userId);
}
